#!/usr/bin/env python3
"""
逢7拍手游戏
规则：从1开始顺序数数，数到有7或者包含7的倍数的时候拍手。
本程序将输出100以内需要拍手的数字。
"""

def is_clap_number(num):
    """
    判断一个数字是否需要拍手
    
    参数:
    num -- 要判断的数字
    
    返回:
    bool -- 如果数字是7的倍数或包含数字7，则返回True，否则返回False
    """
    return num % 7 == 0 or '7' in str(num)

def print_clap_numbers(limit=100):
    """
    打印指定范围内需要拍手的数字
    
    参数:
    limit -- 范围上限，默认为100
    """
    print("逢7拍手游戏 - 需要拍手的数字：")
    print("=" * 30)
    
    clap_numbers = []
    for num in range(1, limit + 1):
        if is_clap_number(num):
            clap_numbers.append(num)
    
    # 格式化输出，每行显示10个数字
    for i in range(0, len(clap_numbers), 10):
        row = clap_numbers[i:i+10]
        print(" ".join(f"{num:2d}" for num in row))
    
    print("=" * 30)
    print(f"总计：{len(clap_numbers)}个数字需要拍手")

def play_seven_clap_game():
    """
    交互式逢7拍手游戏
    """
    print("欢迎来到逢7拍手游戏！")
    print("规则：从1开始数数，遇到7的倍数或包含7的数字时请拍手")
    print("输入'q'退出游戏，输入其他键继续...")
    
    current_number = 1
    while True:
        user_input = input(f"当前数字: {current_number} - 请按回车键继续（输入'q'退出）: ")
        
        if user_input.lower() == 'q':
            print("游戏结束！")
            break
        
        if is_clap_number(current_number):
            print(f"🔇 拍手！数字 {current_number} 是7的倍数或包含7")
        else:
            print(f"继续，数字 {current_number} 不需要拍手")
        
        current_number += 1
        
        # 每10个数显示一次进度
        if current_number % 10 == 1:
            print("-" * 20)

if __name__ == "__main__":
    # 打印100以内需要拍手的数字
    print_clap_numbers(100)
    
    # 询问用户是否要玩交互式游戏
    play_game = input("\n是否要玩交互式逢7拍手游戏？(y/n): ")
    if play_game.lower() == 'y':
        play_seven_clap_game()
